#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/**
 * 动态内存的分配
 */
int main() {

	// 字符数组
	char aa[19];
	// 指针数组
	char *bb[22];
	// 二维字符数组
	char cc[22][19] = {"Example", " String 1 ", "Words"};
	int xx, yy;
	printf("*********** Section 1 - Using calloc ****************\n");

	// 将字符串copy
	strcpy(aa, cc[0]);
	// 获取字符串长度
	xx = strlen(aa);
	// 根据字符串长度分配内存
	bb[0] = (char *) calloc(xx, sizeof(char));

	// copy字符串
	strcpy(bb[0], aa);
	puts(bb[0]);

	printf("************* Section 2 - Using malloc ***************\n");
	strcpy(aa, cc[1]);
	xx = strlen(aa);
	// 计算需要的字节数
	yy = xx * sizeof(char);
	bb[1] = (char *) malloc(yy);

	strcpy(bb[1], aa);
	puts(bb[1]);

	printf("************* Section 3 - Using realloc ****************\n");
	strcpy(aa, cc[2]);
	xx = strlen(aa);
	yy = xx * sizeof(char);

	// 在以前的地址上重新分配内存
	bb[1] = (char *) realloc(bb[1], yy);
	strcpy(bb[1], aa);
	puts(bb[1]);
	// 释放内存
	free(bb[1]);
}